Move Members Refactoring 

 

섹션은 Move Members 리팩토링 위에서 당신에게 포괄적인  overview 제공하고  how 리팩토링이 IntelliJ IDEA에서 사용될 있는가를 제공합니다.

개요


IDEA
에서, 리팩토링을 사용하면 당신은 정적인 필드, 메소드 또는 내부 클래스를 다른 클래스의 쪽으로 옮깁니다.   결과로, 정적인 메소드, 필드 또는 내부 클래스는 다른 위치로 옮겨지고 상응하는 참조는 업데이트됩니다.


예를 들면, 우리는 다음 클래스를 가집니다:

 
    public class AClass {
 
        public static void methodA() {
            //some code here
        }
        public void methodB() {
            //some code here
            methodA();
        }
    }



그리고 당신은 정적인 methodA AnotherClass 이동하는 것을 결정합니다, 그것은 이것과 같이 보입니다:

 
    public class AnotherClass {
    }


그리고 이것은 당신의 클래스가 리팩토링을 봐줄 방법입니다:

 
    public class AClass {
 
            public void methodB() {
                //some code here
                AnotherClass.methodA();
            }
        }
 
        ...
 
    public class AnotherClass {
 
        public static void methodA() {
            //some code here
        }
    }

 

Moving Members  


클래스 멤버를 옮기기 위해서:

1.  Project 보기에서:

정적인 필드/메소드/내부 클래스를 선택하고 클래스 멤버를 오른쪽 버튼 클릭하는 것에 의해 불려지는 팝업 메뉴 에서 Refactor |  Move...  클릭하십시오.


당신은 메소드, 필드 또는 내부 클래스를 선택하기 위해 어떤 다른 보기를 사용할 있습니다, 예를 들면 Structure.



editor 에서 : 
이동하게 정적인 필드/메소드/내부 클래스에서 캐럿을 선택하고 메뉴에서 또는 에디터에서 오른쪽 버튼을 클릭하는 것에 의해 불려지는 팝업 메뉴 에서 Refactor |  Move... 클릭하십시오.


당신이 정적인 내부 클래스를 옮기려고 하고 있을 , 선택한 내부 클래스를 위해 리팩토링을 선택하면 당신은 다음의 다이얼로그를 것입니다:





만일 내부 클래스가 상위 수준으로 옮겨지면  Move Inner to Upper  리팩토링을 보십시오.

2.  Move Members  다이얼로그가 나타납니다:

Move members from  


필드는 어느 멤버가 옮겨지는지 클래스에 보여줍니다.

 

To (fully  qualified name): 


여기에서 당신은 타겟 클래스의 완전 수식된 이름을 생성할 있거나,  ellipsis버튼을 눌러서 필요한 타겟 클래스를 발견하도록 Choose Destination Class 다이얼로그를 부를 있습니다:


만일 그런 이름이 있는 어떤 클래스도 없으면 IDEA 새로운 클래스를 생성 것을 제안할 것입니다.

Members to be moved  (static only)  


목록에서 당신은 상응하는 체크 박스를 선택하는 것에 의해 이동되는 클래스 멤버를 선택할 있습니다.

 

Preview usages  to be changed  

체크 박스를 선택하면 당신은 어떤 사용이 발견되었는지 추적하고, 그들의 교체를 승인하도록 허락합니다.   체크 박스가 선택되지 않을 , IDEA 교체 기능를 자동적으로 수행합니다.


심지어 체크 박스가 선택되지 않았을 때도, 만일 발견된 사용이 어떤 읽기 전용 파일에서 존재하면 교체 사용을 확인하는 프롬프트가 당신에 대기될 입니다.


Refactoring Preview 다이얼로그에서 (만일 그것이 나타나면) 당신은 수행된 변경을 분석할 있습니다.  리팩토링과 함께 진행하기 위해서, Do Refactor 클릭합니다그렇지 않다면 Cancel 클릭합니다. 상세한 것을 보려면 Refactoring Preview 보십시오.



3.   OK 누릅니다, 그리고 원하는 멤버는 이동될 것입니다.

4.   멤버를 이동하려고 시도하면, 당신이 정적인 메소드/필드/내부 클래스(예를 들면 그들은 개인적 또는 로컬 패키지가 있습니다) 이동하기를 원할 당신은 다른 메소드 또는 내부 클래스(예를 들면, 개인적인 또는 로컬 패키지)에서 그리고 그들의 소스 위치를 처리하지만 리팩토링 후에 그곳에서 보이지 않을 반대에서 영향을 받는 정적인 메소드/필드/내부 클래스가 위치하려고 하는 문제에 부딪칠지도 모릅니다. 그리고 관련된 코드는 이동되지 않습니다

 

예를 들면:

 
public class AClass {
        private static int a = 0;
 
        public static void f1(){
            a = 1;
            f2();
        }
 
        private static void f2(){
            //some code here
        }
    }
 

여기 당신이 메소드 f2() 아닌 메소드 f1() 이동시키려고 합니다.

그때 다음의 Problems Detected 다이얼로그가 나타납니다.




만일 당신이 Cancel (디폴트) 누르면, 당신은 Move Members 다이얼로그에서 뒤로 것입니다. 거기서 당신은 가능한 솔루션을 위해 탐색할 있습니다:

  의심스러운 멤버를 이동하지 않습니다(여기- f1());

  또한 멤버와 관련된 다른 것을 이동합니다. (여기- f2())l;

  Move Members  리팩토링을 취소하고, 당신의 코드를 수동으로 정정하고, 원하는 멤버를 다시 옮기려고 합니다.

 

만일 당신이 Continue 누르면, 원하는 멤버는 옮겨질 것이지만 컴파일 하기 위해서 당신은 코드를 수동으로 가지고 있을 것입니다.